package com.java.base.exercise.guava;

import com.google.common.collect.ImmutableSet;
import org.assertj.core.util.Sets;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @Author RenPu
 * @Date 2021/7/3 10:57
 * @Version 1.0
 * @Description: 不可变量对象的优点：
 * 1：不可信库调用的时，不可变形式是安全的
 * 2：多线程访问，不存在竞争的情况
 * 3：不可变集合不用考虑变化，因此可以节约时间和空间
 * 4：不可变对象因为有固定不变，可以作为常量安全使用
 **/
public class ImmutableTest {

    public static void listRemoveFirst(List<Integer> list) {
        list.remove(0);
    }


    public static void main(String[] args) {
        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);

        Collections.unmodifiableList(integers);

        listRemoveFirst(integers);


        System.out.println(integers);

    }

    /**
     * guava方法实现不可变量的三种构建方式
     */
    public void immutableMethod() {

        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);


        ImmutableSet<Integer> integers1 = ImmutableSet.copyOf(integers);

        ImmutableSet<Integer> of = ImmutableSet.of(1, 2, 3, 4);

        ImmutableSet.builder()
                .add(2)
                .add(3)
                .addAll(Sets.newTreeSet(1, 2))
                .build();

    }


}
